package sv.gob.mh.dgii.service.security;

import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sv.gob.mh.dgii.common.PagedResult;
import sv.gob.mh.dgii.dao.hibernate.Dao;
import sv.gob.mh.dgii.dao.security.AsOpcionDao;
import sv.gob.mh.dgii.model.AsOpcion;
import sv.gob.mh.dgii.model.AsRol;
import sv.gob.mh.dgii.model.pojos.RequestMap;
import sv.gob.mh.dgii.service.BaseService;

@Service
@Transactional
public class AsOpcionServiceImpl extends BaseService implements AsOpcionService {

    @Autowired
    private AsOpcionDao asOpcionDao;

    @Override
    public Dao getDao() {
        return asOpcionDao;
    }

    @Override
    public List<RequestMap> getRolesForSecurity() {

        List<RequestMap> requests = new ArrayList<RequestMap>();
        List<AsOpcion> opciones = asOpcionDao.findAll();
        if (opciones != null && opciones.size() > 0) {
            for (AsOpcion opcion : opciones) {
                RequestMap request = new RequestMap(opcion.getSurl());
                for (Object o2 : opcion.getRoles()) {
                    AsRol rol = (AsRol) o2;
                    request.getRoles().add(rol.getSrol());
                }

                requests.add(request);
            }
        }
        return requests;
    }

    @Override
    public List<AsOpcion> findByRole(AsRol role) {
        return asOpcionDao.findByRole(role);
    }

    @Override
    public List<AsOpcion> findOnlyPadres() {
        return asOpcionDao.findOnlyPadres();
    }

    @Override
    public List<AsOpcion> findHijas(AsOpcion padre) {
        return asOpcionDao.findHijas(padre);
    }

    @Override
    public AsOpcion findPadre(AsOpcion hija) {
        return asOpcionDao.findPadre(hija);
    }

    @Override
    public List<AsRol> findRolesByOpcion(AsOpcion opcion) {
        return asOpcionDao.findRolesByOpcion(opcion);
    }

    @Override
    public List<AsOpcion> findAllOpcionesBySRol(String[] roles) {
        return asOpcionDao.findAllOpcionesBySRol(roles);
    }

    @Override
    public PagedResult findModules(int page, int pageSize) {
        return asOpcionDao.findModules(page, pageSize);
    }

    @Override
    public int replaceModuleName(String oldModuleName, String newModuleName) {
        return asOpcionDao.replaceModuleName(oldModuleName, newModuleName);
    }
}
//class